package Modelo;

import java.util.*;

public class AgujeroNegro implements Bloque, Actor {

	private boolean vivo;
	private boolean esFirme;
	private Mapa mapa;
	private Collection<Bloque> bloquesQueChupa;
	
	public AgujeroNegro(Mapa mapa){
		vivo=true;
		esFirme = false;
		this.mapa=mapa;
	}
	
	public String toString(){
		return new String("A");
	}
	
	
	/**
	 *Al alojar un personaje, tambien lo mata
	 *@param Personaje
	 * */
	public void alojar(Personaje unPersonaje) {
		unPersonaje.morir();
	}

	/**
	 * Por el momento no va a desalojar a ningun
	 * Personaje que fue tragado
	 * @param unPersonaje 
	 * */
	public void desalojar(Personaje unPersonaje) {
		// por el momento no desaloja nada
	}

	/**
	 * Inidica si el Agujero negro es firme
	 * @return boolean
	 * */
	public boolean esFirme() {
		return this.esFirme;
	}

	/**
	 * Indica si un Personaje fue tragado por el Agujero Negro
	 * @param Personaje
	 * @return boolean
	 * */
	public boolean estaAlojado(Personaje unPersonaje) {
		return false;
	}

	public void destruir(){
		vivo=false;	// para matar el hilo
		mapa.ModificarBloquePor(this,new Vacio(mapa));	
	}
	
	public Numeros velocidadFinal(Numeros velocidad){
		return velocidad;
	}
	
	public void actuar(){
		// pido cada vez porque el mapa puede modificarse en cada ciclo
		bloquesQueChupa= mapa.getbloquesANDistanciaDe(this,Constantes.bloquesChupadosPorAgujero);
		Iterator<Bloque> itBloque = bloquesQueChupa.iterator();
		while (itBloque.hasNext()){	// barro los bloques
			Bloque bloque=itBloque.next();
			try{
				Collection<Personaje> huespedes=bloque.getAlojados();
				while(huespedes.size()!=0){
					Iterator<Personaje> itPersonaje = huespedes.iterator();
					if(itPersonaje.hasNext()){ 
						Personaje victima= itPersonaje.next();
						victima.morir();
						bloque.desalojar(victima);
					}
					huespedes= bloque.getAlojados();
				}
			}
			catch(NullPointerException e){				
			}
		}				
	}
	
	public Collection<Personaje> getAlojados() {
		return null;
	}
	public void atacar(Numeros potenciaDelAtaque) {
		
	}
}
